From 94afc212fc923af63513c313a91ce6c9c983b9d5 Mon Sep 17 00:00:00 2001 From: james_sherring Date: Wed, 12 May 2004 13:18:03 +0000 Subject: [PATCH] *** empty log message *** --- st2gpx/istorage/istorage LICENCE.txt | 24 -- st2gpx/istorage/istorage-make LICENCE.txt | 24 -- st2gpx/istorage/istorage-make README.txt | 17 -- st2gpx/istorage/istorage-make.cpp | 218 ------------------ st2gpx/istorage/istorage-make.exe | Bin 40960 -> 0 bytes st2gpx/istorage/istorage.cpp | 261 ---------------------- st2gpx/istorage/istorage.exe | Bin 45056 -> 0 bytes st2gpx/istorage/its-make.exe | Bin 40960 -> 0 bytes 8 files changed, 544 deletions(-) delete mode 100644 st2gpx/istorage/istorage LICENCE.txt delete mode 100644 st2gpx/istorage/istorage-make LICENCE.txt delete mode 100644 st2gpx/istorage/istorage-make README.txt delete mode 100644 st2gpx/istorage/istorage-make.cpp delete mode 100644 st2gpx/istorage/istorage-make.exe delete mode 100644 st2gpx/istorage/istorage.cpp delete mode 100644 st2gpx/istorage/istorage.exe delete mode 100644 st2gpx/istorage/its-make.exe diff --git a/st2gpx/istorage/istorage LICENCE.txt b/st2gpx/istorage/istorage LICENCE.txt deleted file mode 100644 index fde84dffe..000000000 --- a/st2gpx/istorage/istorage LICENCE.txt +++ /dev/null @@ -1,24 +0,0 @@ -Copyright (c) 2001, Pabs (pabs3@zip.to) -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -Redistributions of source code must retain the above copyright notice, -this list of conditions and the following disclaimer. -Redistributions in binary form must reproduce the above copyright -notice, this list of conditions and the following disclaimer in the -documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/st2gpx/istorage/istorage-make LICENCE.txt b/st2gpx/istorage/istorage-make LICENCE.txt deleted file mode 100644 index 5ee1421bf..000000000 --- a/st2gpx/istorage/istorage-make LICENCE.txt +++ /dev/null @@ -1,24 +0,0 @@ -Copyright (c) 2002, Pabs (pabs3@zip.to) -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -Redistributions of source code must retain the above copyright notice, -this list of conditions and the following disclaimer. -Redistributions in binary form must reproduce the above copyright -notice, this list of conditions and the following disclaimer in the -documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/st2gpx/istorage/istorage-make README.txt b/st2gpx/istorage/istorage-make README.txt deleted file mode 100644 index fc0813efc..000000000 --- a/st2gpx/istorage/istorage-make README.txt +++ /dev/null @@ -1,17 +0,0 @@ -There are two executables, with just the default output type changed: - -istorage-make.exe - defaults to making OLE IStorages - made from the distributed source with MSVC 6 - -its-make.exe - defaults to making compressed ITS ITStorages - made from modified source with MSVC 6 - -Read LICENCE.txt for conditions of distribution and modification. -To use just drag a folder onto the appropriate executable/shortcut. -Don't worry about the warnings saying that the times could not be set. - -Enjoy say i, -Pabs -http://zip.to/pabs3/ \ No newline at end of file diff --git a/st2gpx/istorage/istorage-make.cpp b/st2gpx/istorage/istorage-make.cpp deleted file mode 100644 index 6e5cc628d..000000000 --- a/st2gpx/istorage/istorage-make.cpp +++ /dev/null @@ -1,218 +0,0 @@ -/*Copyright by Pabs (pabs3@zip.to, http://zip.to/pabs3/) Dec 2002*/ - -/*Licenced under the BSD sloppyright - nasty little daemons better not use this source & not attribute me*/ - -/*Compile notes: - M$VC: just open this file & press the build button or select build from the - build menu since this will create a default project that does nicely - GCC/Cygwin: gcc -mno-cygwin -fvtable-thunks -o istorage-make.exe istorage-make.cpp -lole32 should do the trick - if w32api & mingw are set up correctly & the headers are correct - GCC/Wine: You'll have to figure it out for yourself since I don't yet have - access to Linux (Debian) cause I need a new HD + a DVD drive ;-) -*/ - -/* Usage: - -ole - convert to an OLE compound file (default) - -its - convert to an ITS file - -its -uc - don't compress (default) - -its -cd - compress the data after creation - -its -cdp - compress the data and path after creation -*/ - -/*TODO: - think up a proper name - Add popt/getopt processing - use libOLE on non-win32 - http://chicago.sf.net - Implement options for the following - rename specific files to something the normal filesystem can't handle, like 0x1 characters - various tar/unzip options - --help --version -*/ - - -#include -#include -#include -#include - - -//These next few bits are from a sample available from http://www.keyworks.net/code.htm (see http://helpware.net/delphi/index.html for a Delphi sample - need to join a yahoo group first - example 10 is the one to look at) -//This stuff is supposed to be documented in the MSDN, but I only found 1 page that references ITStorage & that is an error codes list -DEFINE_GUID(CLSID_ITStorage, 0x5d02926a, 0x212e, 0x11d0, 0x9d, 0xf9, 0x0, 0xa0, 0xc9, 0x22, 0xe6, 0xec); -DEFINE_GUID(IID_ITStorage, 0x88cc31de, 0x27ab, 0x11d0, 0x9d, 0xf9, 0x0, 0xa0, 0xc9, 0x22, 0xe6, 0xec); - -const GUID CLSID_ITStorage = { 0x5d02926a, 0x212e, 0x11d0, { 0x9d, 0xf9, 0x0, 0xa0, 0xc9, 0x22, 0xe6, 0xec } }; -const GUID IID_ITStorage = { 0x88cc31de, 0x27ab, 0x11d0, { 0x9d, 0xf9, 0x0, 0xa0, 0xc9, 0x22, 0xe6, 0xec} }; - -typedef struct _ITS_Control_Data -{ - UINT cdwControlData; // Number of DWords to follow. - UINT adwControlData[1]; // Actually this will be adwControlData[cdwControlData] -} ITS_Control_Data, *PITS_Control_Data; - -typedef enum ECompactionLev { - COMPACT_DATA = 0, - COMPACT_DATA_AND_PATH -}; - -DECLARE_INTERFACE_(IITStorage, IUnknown) -{ - STDMETHOD(StgCreateDocfile) (const WCHAR* pwcsName, DWORD grfMode, DWORD reserved, IStorage** ppstgOpen) PURE; - STDMETHOD(StgCreateDocfileOnILockBytes) (ILockBytes * plkbyt, DWORD grfMode, DWORD reserved, IStorage** ppstgOpen) PURE; - STDMETHOD(StgIsStorageFile) (const WCHAR * pwcsName) PURE; - STDMETHOD(StgIsStorageILockBytes) (ILockBytes * plkbyt) PURE; - STDMETHOD(StgOpenStorage)(const WCHAR * pwcsName, IStorage * pstgPriority, DWORD grfMode, SNB snbExclude, DWORD reserved, IStorage ** ppstgOpen) PURE; - STDMETHOD(StgOpenStorageOnILockBytes)(ILockBytes * plkbyt, IStorage * pStgPriority, DWORD grfMode, SNB snbExclude, DWORD reserved, IStorage ** ppstgOpen) PURE; - STDMETHOD(StgSetTimes)(WCHAR const* lpszName, FILETIME const* pctime, FILETIME const* patime, FILETIME const* pmtime) PURE; - STDMETHOD(SetControlData)(PITS_Control_Data pControlData) PURE; - STDMETHOD(DefaultControlData)(PITS_Control_Data *ppControlData) PURE; - STDMETHOD(Compact)(const WCHAR* pwcsName, ECompactionLev iLev) PURE; -}; - -IITStorage* ITStorage = NULL; - -struct OPTIONS{ - bool its; - bool compress; - ECompactionLev compression; - char indentchar; - char* ole_appendstring; - char* its_appendstring; -} options = {false,false,COMPACT_DATA,'\t',".ole",".its"}; - -HRESULT r; - -void EnumFolder(char*f,IStorage* is); - -int main(int argc, char *argv[]){ - //Get an instance of the thing to call for creating chms - CoInitialize(NULL); - CoCreateInstance(CLSID_ITStorage, NULL, CLSCTX_INPROC_SERVER, IID_ITStorage, (void**)&ITStorage); - char t[2];DWORD cdl = GetCurrentDirectory(2,t); - char* current_dir = new char[cdl]; - if(current_dir){ - if(GetCurrentDirectory(cdl,current_dir)){ - for(int argi=1;argiStgCreateDocfile( wfile, STGM_CREATE|STGM_WRITE|STGM_SHARE_EXCLUSIVE, 0, &is ); - else - r = StgCreateDocfile( wfile, STGM_CREATE|STGM_WRITE|STGM_SHARE_EXCLUSIVE, 0, &is ); - - if( r == S_OK || is ){ - EnumFolder( argv[argi], is ); - is->Release(); is = NULL; - if( options.its && ITStorage && options.compress ){ - r = ITStorage->Compact( wfile, options.compression ); - if(r!=S_OK) fputs("Could not compress the specified file - Ignoring & continuing\n",stderr); - } - } else fputs("Could not create the specified file - Ignoring & continuing\n",stderr); - } else fputs("Could not convert the path to Unicode for the Unicode only StgOpenStorage - Ignoring & continuing\n",stderr); - delete[]wfile; wfile = NULL; - } else fputs("Could not alloc memory for the Unicode filename for the Unicode only StgCreateDocfile - Ignoring & continuing",stderr); - delete[]file; file = NULL; - } else fputs("Could not alloc memory for the filename - Ignoring & continuing",stderr); - } else fputs("Could not enter (directory) - Ignoring & continuing\n",stderr); - } else fputs("Could not enter (directory) - Ignoring & continuing\n",stderr); - } else fputs("Could not reset current directory - Ignoring & continuing\n",stderr); - } - } else fputs("Could not get current directory - Failed\n",stderr); - } else fputs("Could not allocate memory for current directory - Failed\n",stderr); - if( ITStorage ) ITStorage->Release(); - CoUninitialize(); - fflush(stderr); - return 0; -} - -void EnumFolder(char*fo, IStorage* is){ - if(SetCurrentDirectory(fo)){ - HANDLE ff;WIN32_FIND_DATA wfd; - ff = FindFirstFile("*",&wfd); - if(ff!=INVALID_HANDLE_VALUE&&ff!=0){ - do{ - if( strcmp(wfd.cFileName,".") == 0 || strcmp(wfd.cFileName,"..") == 0 ) continue; - DWORD len = strlen(wfd.cFileName)+1; - DWORD wlen = MultiByteToWideChar(CP_ACP,0,wfd.cFileName,len,NULL,0); - WCHAR* wpath = new WCHAR[len]; - if(wpath){ - if(MultiByteToWideChar(CP_ACP,0,wfd.cFileName,len,wpath,wlen)){ - if(wfd.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY){ - IStorage* is2 = NULL; - r = is->CreateStorage(wpath,STGM_WRITE|STGM_SHARE_EXCLUSIVE,0,0,&is2); - if( r == S_OK && is2 ){ - EnumFolder(wfd.cFileName,is2); - //if(S_OK!=is2->SetStateBits(wfd.dwFileAttributes)) fputs("Could not set state bits (directory) - Ignoring & continuing\n",stderr); - is2->Release(); is2 = NULL; - } else fputs("Could not create (directory) - Ignoring & continuing\n",stderr); - } else { - IStream* is2 = NULL; - r = is->CreateStream(wpath,STGM_WRITE|STGM_SHARE_EXCLUSIVE,0,0,&is2); - if( r == S_OK && is2 ){ - HANDLE f = CreateFile(wfd.cFileName,GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_FLAG_SEQUENTIAL_SCAN,NULL); - if(f!=INVALID_HANDLE_VALUE&&f!=0/*Fucking lying MSDN*/){ - ULARGE_INTEGER fs={wfd.nFileSizeLow,wfd.nFileSizeHigh},i={0}; - is2->SetSize(fs); - BYTE* p; - DWORD nobm = (DWORD)fs.QuadPart, nobr, nobw; - for(;;){ - p = new BYTE[nobm]; if(p)break; - nobm/=2; if(!nobm)break; - } - if(p){ - bool err = false; - do{ - if(!ReadFile(f,p,nobm,&nobr,NULL)||nobm!=nobr){fputs("Read error (file) - terminating this file\n",stderr);err=true;}//read less than asked and there was an error other than EOF - MSDN says that the compound file implementation of Read returns S_OK if the end of the stream was reached during the read - nobw=0; - r=is2->Write(p,nobr,&nobw); - i.QuadPart+=nobw; - if(r!=S_OK||nobr!=nobw){fputs("Write error (file) - terminating this file\n",stderr);err=true;} - } while (i.QuadPartRelease(); is2 = NULL; - } else fputs("Could not create (file) - Ignoring & continuing\n",stderr); - } - if(S_OK!=is->SetElementTimes(wpath,&wfd.ftCreationTime,&wfd.ftLastAccessTime,&wfd.ftLastWriteTime)) fputs("Could not set the creation, last modification or last access time - Ignoring & continuing\n",stderr); - } - } - } while(FindNextFile(ff,&wfd)); - FindClose(ff); - } - SetCurrentDirectory(".."); - } else fputs("Could not enter (directory) - Ignoring & continuing\n",stderr); -} diff --git a/st2gpx/istorage/istorage-make.exe b/st2gpx/istorage/istorage-make.exe deleted file mode 100644 index 2d32888413e5807da6ad3d6ed60f9fe16c7accb9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40960 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 -#include -#include -#include - - -struct OPTIONS{ - char fixchar; - char* invalidchars; - char indentchar; - char* appendstring; -} options = {'.',"<>|/\\\"",'\t',".Contents"}; - -HRESULT r; - -DWORD level = 0; - -//These next few bits are from a sample available from http://www.keyworks.net/code.htm (see http://helpware.net/delphi/index.html for a Delphi sample - need to join a yahoo group first - example 10 is the one to look at) -//This stuff is supposed to be documented in the MSDN, but I only found 1 page that references ITStorage & that is an error codes list -DEFINE_GUID(CLSID_ITStorage, 0x5d02926a, 0x212e, 0x11d0, 0x9d, 0xf9, 0x0, 0xa0, 0xc9, 0x22, 0xe6, 0xec); -DEFINE_GUID(IID_ITStorage, 0x88cc31de, 0x27ab, 0x11d0, 0x9d, 0xf9, 0x0, 0xa0, 0xc9, 0x22, 0xe6, 0xec); - -const GUID CLSID_ITStorage = { 0x5d02926a, 0x212e, 0x11d0, { 0x9d, 0xf9, 0x0, 0xa0, 0xc9, 0x22, 0xe6, 0xec } }; -const GUID IID_ITStorage = { 0x88cc31de, 0x27ab, 0x11d0, { 0x9d, 0xf9, 0x0, 0xa0, 0xc9, 0x22, 0xe6, 0xec} }; - -typedef struct _ITS_Control_Data -{ - UINT cdwControlData; // Number of DWords to follow. - UINT adwControlData[1]; // Actually this will be adwControlData[cdwControlData] -} ITS_Control_Data, *PITS_Control_Data; - -typedef enum ECompactionLev { - COMPACT_DATA = 0, - COMPACT_DATA_AND_PATH -}; - -DECLARE_INTERFACE_(IITStorage, IUnknown) -{ - STDMETHOD(StgCreateDocfile) (const WCHAR* pwcsName, DWORD grfMode, DWORD reserved, IStorage** ppstgOpen) PURE; - STDMETHOD(StgCreateDocfileOnILockBytes) (ILockBytes * plkbyt, DWORD grfMode, DWORD reserved, IStorage** ppstgOpen) PURE; - STDMETHOD(StgIsStorageFile) (const WCHAR * pwcsName) PURE; - STDMETHOD(StgIsStorageILockBytes) (ILockBytes * plkbyt) PURE; - STDMETHOD(StgOpenStorage)(const WCHAR * pwcsName, IStorage * pstgPriority, DWORD grfMode, SNB snbExclude, DWORD reserved, IStorage ** ppstgOpen) PURE; - STDMETHOD(StgOpenStorageOnILockBytes)(ILockBytes * plkbyt, IStorage * pStgPriority, DWORD grfMode, SNB snbExclude, DWORD reserved, IStorage ** ppstgOpen) PURE; - STDMETHOD(StgSetTimes)(WCHAR const* lpszName, FILETIME const* pctime, FILETIME const* patime, FILETIME const* pmtime) PURE; - STDMETHOD(SetControlData)(PITS_Control_Data pControlData) PURE; - STDMETHOD(DefaultControlData)(PITS_Control_Data *ppControlData) PURE; - STDMETHOD(Compact)(const WCHAR* pwcsName, ECompactionLev iLev) PURE; -}; - -IITStorage* ITStorage = NULL; - -void EnumStorage(IStorage* is); -void fixpath(char* s); - -int main(int argc, char *argv[]){ - //Get an instance of the thing to call for opening chms - CoInitialize(NULL); - CoCreateInstance(CLSID_ITStorage, NULL, CLSCTX_INPROC_SERVER, IID_ITStorage, (void**)&ITStorage); - for(int i=1;iStgOpenStorage(wpath,NULL,STGM_READ|STGM_SHARE_DENY_WRITE,NULL,0,&is); - fputs("StgOpenStorage failed, trying chm version...",stderr); - } - delete[]wpath; wpath = NULL; - if( r == S_OK || is ){ - STATSTG ss; - if(S_OK==is->Stat(&ss,STATFLAG_NONAME))fprintf(stderr,"CLSID={%8.8X-%4.4X-%4.4X-%4.4X-%2.2X%2.2X%2.2X%2.2X%2.2X%2.2X} State=0x%8.8X reserved=0x%8.8X\n", ss.clsid.Data1, ss.clsid.Data2, ss.clsid.Data3, ss.clsid.Data4[0]<<8/*&0xff00*/| ss.clsid.Data4[1], ss.clsid.Data4[2], ss.clsid.Data4[3], ss.clsid.Data4[4], ss.clsid.Data4[5], ss.clsid.Data4[6], ss.clsid.Data4[7], ss.grfStateBits, ss.reserved); - else fputs("Stat failed\n",stderr); - char* path = new char[len+strlen(options.appendstring)+1]; - if(path){ - strcpy(path,argv[i]); - strcpy(&path[len],options.appendstring); - RemoveDirectory(path); - if(CreateDirectory(path,NULL)||GetLastError()==ERROR_ALREADY_EXISTS){ - if(SetCurrentDirectory(path)){ - delete[]path; path = NULL; - level++; - EnumStorage(is); - level--; - SetCurrentDirectory(".."); - } - else fputs("Could not enter - Ignoring & continuing\n",stderr); - } - else fputs("Could not create (directory) - Ignoring & continuing\n",stderr); - delete[]path; path = NULL; - } - else fputs("Could not alloc memory for the ANSI pathname for the wimpy Win9$ - Ignoring & continuing\n",stderr); - is->Release(); - } - else fputs("Could not open the specified file - Ignoring & continuing\n",stderr); - } - else fputs("Could not convert the path to Unicode for the Unicode only StgOpenStorage - Ignoring & continuing\n",stderr); - delete[]wpath; wpath = NULL; - } - else fputs("Could not alloc memory for the Unicode filename for the Unicode only StgOpenStorage - Ignoring & continuing",stderr); - } - if( ITStorage ) ITStorage->Release(); - CoUninitialize(); - fflush(stderr);//Helps with debugging - return 0; -} - -void EnumStorage(IStorage* is){ - IEnumSTATSTG* iess; - r = is->EnumElements(0,NULL,0,&iess); - if( r!= S_OK ) { fputs("Could not enumerate elements - Ignoring & continuing\n",stderr); return;} - STATSTG ss; - iess->Reset(); - for(;;){ - r=iess->Next(1,&ss,NULL); - if( r!= S_OK ) break; - for(DWORD i=0;iOpenStorage(ss.pwcsName,NULL,STGM_READ|STGM_SHARE_EXCLUSIVE,NULL,0,&is2); - CoTaskMemFree(ss.pwcsName); ss.pwcsName = NULL; - if( r == S_OK || is2 ){ - if(CreateDirectory(path,NULL)||(r=GetLastError())==ERROR_ALREADY_EXISTS){ - if(r==ERROR_ALREADY_EXISTS)fputs("Already exists (directory) - using anyway\n",stderr); - else fputs("Created (directory)\n",stderr); - HANDLE f = CreateFile(path,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL); - if(f!=INVALID_HANDLE_VALUE&&f!=0/*Fucking lying MSDN*/){ - if(!SetFileTime(f,&ss.ctime,&ss.atime,&ss.mtime))fputs("Could not set the creation, last modification or last access time\n",stderr); - CloseHandle(f); - } - if(SetCurrentDirectory(path)){ - delete[]path; path = NULL; - level++; - EnumStorage(is2); - level--; - SetCurrentDirectory(".."); - } - else fputs("Could not enter (directory) - Ignoring & continuing\n",stderr); - } - else fputs("Could not create (directory) - Ignoring & continuing\n",stderr); - is2->Release(); - } - else fputs("Could not open (directory) - Ignoring & continuing\n",stderr); - }break; - case STGTY_STREAM:{ - IStream* is2; - r = is->OpenStream(ss.pwcsName,NULL,STGM_READ|STGM_SHARE_EXCLUSIVE,0,&is2); - CoTaskMemFree(ss.pwcsName); ss.pwcsName = NULL; - if( r == S_OK ){ - HANDLE f = CreateFile(path,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL); - delete[]path; path = NULL; - if(f!=INVALID_HANDLE_VALUE&&f!=0/*Fucking lying MSDN*/){ - if(ERROR_ALREADY_EXISTS==GetLastError())fputs("Already exists (file) - overwriting\n",stderr); - else fputs("Created (file)\n",stderr); - //This bit, although a bit more complex than 1 byte at a time, is way faster - BYTE* p; - ULARGE_INTEGER i={0}; - DWORD nobm = (DWORD)ss.cbSize.QuadPart, nobr, nobw; - bool err; - for(;;){ - p = (BYTE*)malloc( nobm ); if(p)break; - nobm/=2; if(!nobm)break; - } - if(p){ - do{ - r=is2->Read(p,nobm,&nobr); - if(r!=S_OK&&nobm!=nobr){fputs("Read error (file) - terminating this file\n",stderr);err=true;}//read less than asked and there was an error other than EOF - MSDN says that the compound file implementation of Read returns S_OK if the end of the stream was reached during the read - nobw=0; - r=WriteFile(f,p,nobr,&nobw,NULL); - i.QuadPart+=nobw; - if(!r||nobr!=nobw){fputs("Write error (file) - terminating this file\n",stderr);err=true;} - } while (i.QuadPartRelease(); - } - else fputs("Could not open (file) - Ignoring & continuing\n",stderr); - }break; - case STGTY_LOCKBYTES: - fputs("unsupported ILockBytes object - Ignoring & continuing\n",stderr); - break; - case STGTY_PROPERTY: - fputs("unsupported property storage object - Ignoring & continuing\n",stderr); - break; - default: - fputs("unknown object - Ignoring & continuing\n",stderr); - break; - } - } - else fputs("Could not convert the path back to ANSI for the wimpy Win9$ - Ignoring & continuing\n",stderr); - delete[]path; path = NULL; - } - else fputs("Could not alloc memory for the ANSI pathname for the wimpy Win9$ - Ignoring & continuing\n",stderr); - CoTaskMemFree(ss.pwcsName); ss.pwcsName = NULL; - } - iess->Release(); -} - -void fixpath(char* s){ - while(*s){//*s<32 || should probably be removed on non-FAT file systems - if( *s<32 || strchr(options.invalidchars,*s) )*s=options.fixchar; - s++; - } -} \ No newline at end of file diff --git a/st2gpx/istorage/istorage.exe b/st2gpx/istorage/istorage.exe deleted file mode 100644 index a9741a109cf435cdcd02394bef4c5b56c95f57d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45056 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 Lf+PR`3!nc5*Zl5+ diff --git a/st2gpx/istorage/its-make.exe b/st2gpx/istorage/its-make.exe deleted file mode 100644 index bc9b7cf213784412d725f9d56a729e157a86ca5e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40960 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